基于 BackTrader 的量化回测系统架构
介绍
量化回测系统是用于根据历史数据,验证交易策略好坏的试验场。业界有大量开源或闭源的量化回测系统,在 Python 生态下,也有多个著名的量化开源框架,本文主要基于 BackTrader 框架。
量化回测系统与 BackTrader 框架是什么关系?BackTrader 框架仅提供必要的抽象和核心逻辑。而一个完整的量化系统,还包括金融数据获取,策略效果分析,数据分析等由分析师主观进行的工作。甚至还包括交互界面、运维等能使系统更加易用的计算机技术。
本文系统设计的实现,收到了牙医小赵的开源实现的启发,站在了巨人的肩膀上。
股票数据获取
搞量化研究首先需要股票数据,就如同搞机器学习首先需要数据集一样。数据成为草根进行量化学习的第一道拦路虎。
数据既重要、也不重要,两面都具备。
数据的不重要性
做量化研究,重点是基于数据进行策略分析、挖掘。策略、理论、算法才是重要的。从这一维度上说数据并不重要。
这就好像你花重金买了一套汽修设备,有了设备并不代表自己会修理汽车,而修理汽车一定要有专业设备。
数据的重要性
数据集的好坏会影响到数据决策。包含以下几个因素:
- 避免未来信息
- 全面性:决定了算法的眼界
- 准确性:测量理论,越精确越好
- 时效性
我采取的方式
我在这一步里走了很多弯路,原因在于我的重心放在打造一个完美的股票数据系统。
这件事情也有意义,但是偏离了主题。
直到我发现,对于学习量化来说,一个不完美的数据系统也足够用。
目前我选择了一个固定的时间段作为数据集,如果数据集固定下来,一切都变得很容易。于是我快速跨过了这个环节,正式进入到量化的殿堂中。
我建议很多跟我一样,自学量化的小伙伴们,初期不要在数据上花费太多时间。快速跳过这一步。
交易系统
交易系统是对 BackTrader 框架的二次封装,包括单股回测、全市场回测以及策略调优等功能。
策略基类
BackTrader 提供了 bt.Strategy 策略基类,供分析师编写策略。但是该基类功能有些单一,通常会进行二次封装,比如在交易过程中打印一些 log,更便于了解回测过程。
策略基类可参见小赵老师的 tradesys 的 Strategy 类。
A 股手续费
建议参见小赵老师的 tradesys,里面给出了一个考虑印花税和佣金的 bt.CommInfoBase 手续费实现 CNA_Commission。
同时还实现了一个手续费分析器 CostAnalyzer。